/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controller;

import dao.DAOFactory;
import dao.FuncionarioDAO;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import model.Funcionario;
import ordenacao.OrdenacaoPorCodigoFuncionario;
import ordenacao.OrdenacaoPorNomeFuncionario;
import utils.ExcecaoSCEV;
import utils.TrataData;


/**
 *
 * @author Usuario
 */
public class CtrCadastroFuncionario {
    private static CtrCadastroFuncionario umCtrCadastroFuncionario;
    FuncionarioDAO funcionarioDAO;

    private CtrCadastroFuncionario(){


     DAOFactory daoFactory = new DAOFactory();
     funcionarioDAO = daoFactory.getFuncionarioDAO();

    }

    public static CtrCadastroFuncionario getInstance(){
        if (umCtrCadastroFuncionario == null){
            umCtrCadastroFuncionario = new CtrCadastroFuncionario();
        }
        return umCtrCadastroFuncionario;
    }


    public List <Funcionario> listarTodos(int ordenacao) throws ExcecaoSCEV{
        List <Funcionario>lista = new ArrayList <Funcionario>();
        lista = funcionarioDAO.pegarTodos();
        ordenar(ordenacao, lista);
        return lista;
    }

    
    private boolean validar(Funcionario funcionario) throws ExcecaoSCEV {

   if(funcionario.getNome() == null || funcionario.getNome().trim().equals("")){
            throw new ExcecaoSCEV("Nome deve ser preenchido");
        }
        if(funcionario.getCpf() == null || funcionario.getCpf().trim().equals("")){
            throw new ExcecaoSCEV("CPF deve ser preenchido");
        }
        if(funcionario.getSexo() == null || funcionario.getSexo().trim().equals("")){
            throw new ExcecaoSCEV("Sexo deve ser preenchido");
        }
        if (funcionario.getLogradouro() == null || funcionario.getLogradouro().equals("")){
            throw new ExcecaoSCEV("Logradouro deve ser preenchido");
        }
        if (funcionario.getNumero() == null || funcionario.getNumero().equals("")){
            throw new ExcecaoSCEV("Número deve ser preenchido");
        }
        if (funcionario.getBairro() == null || funcionario.getBairro().equals("")){
            throw new ExcecaoSCEV("Bairro deve ser preenchido");
        }
        if (funcionario.getCidade() == null || funcionario.getCidade().equals("")){
            throw new ExcecaoSCEV("Cidade deve ser preenchida");
        }
        if (funcionario.getCep() == null || funcionario.getCep().trim().equals("")){
            throw new ExcecaoSCEV("Cep deve ser preenchido");
        }
        if (funcionario.getUf() == null || funcionario.getUf().equals("")){
            throw new ExcecaoSCEV("UF deve ser preenchido");
        }
        if(funcionario.getDataNascimento() == null){
            throw new ExcecaoSCEV("Data de nascimento deve ser preenchida");
        }

       if (TrataData.dataInvalida(funcionario.getDataNascimento())){
            throw new ExcecaoSCEV("Data de nascimento inválida");
        }

         if (funcionario.getCtps() == null || funcionario.getCtps().equals("")){
            throw new ExcecaoSCEV("Ctps deve ser preenchido");
        }


        return true ;
    }

    public void incluir (Funcionario funcionario) throws ExcecaoSCEV {
        try {
            if (validar(funcionario))
              funcionarioDAO.incluir(funcionario);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
        
    }
    
    public void alterar (Funcionario funcionario) throws ExcecaoSCEV {
        try {
            if (validar(funcionario))
                funcionarioDAO.alterar(funcionario);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
        
    }

        public void excluir (Funcionario funcionario) throws ExcecaoSCEV {
        try {
            funcionarioDAO.excluir(funcionario);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
        
    }

    public void carregar(Funcionario funcionario) throws ExcecaoSCEV {
        try {
            funcionarioDAO.carregar(funcionario);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
    }

    public void ordenar(int ordenacao, List<Funcionario> lista) {
       
        if (ordenacao == 0) {
            Collections.sort(lista, new OrdenacaoPorCodigoFuncionario());
        } else {
            Collections.sort(lista, new OrdenacaoPorNomeFuncionario());
        }
    }
    
   

        
        
    }
        
        
    
   